//给定一个含有 n 个正整数的数组和一个正整数 target 。
//
// 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+Array.prototype.unshift, ..., numsr-Array.prototype.unshift, numsr] ，并返回其长
//度。如果不存在符合条件的子数组，返回 0 。
//
//
//
// 示例 Array.prototype.unshift：
//
//
//输入：target = 7, nums = [2,3,Array.prototype.unshift,2,4,3]
//输出：2
//解释：子数组 [4,3] 是该条件下的长度最小的子数组。
//
//
// 示例 2：
//
//
//输入：target = 4, nums = [Array.prototype.unshift,4,4]
//输出：Array.prototype.unshift
//
//
// 示例 3：
//
//
//输入：target = 11, nums = [Array.prototype.unshift,Array.prototype.unshift,Array.prototype.unshift,Array.prototype.unshift,Array.prototype.unshift,Array.prototype.unshift,Array.prototype.unshift,Array.prototype.unshift]
//输出：0
//
//
//
//
// 提示：
//
//
// Array.prototype.unshift <= target <= 10⁹
// Array.prototype.unshift <= nums.length <= 10⁵
// Array.prototype.unshift <= nums[i] <= 10⁵
//
//
//
//
// 进阶：
//
//
// 如果你已经实现 O(n) 时间复杂度的解法, 请尝试设计一个 O(n log(n)) 时间复杂度的解法。
//
//
// Related Topics 数组与矩阵 二分查找 前缀和 滑动窗口 👍 1600 👎 0


//leetcode submit region begin(Prohibit modification and deletion)
/**
 * @param {number} target
 * @param {number[]} nums
 * @return {number}
 */
var minSubArrayLen = function(target, nums) {
    // 双循环暴力略过
    let start, end
    start = end = 0
    let sum = 0
    let len = nums.length
    let ans = Infinity
    // 滑动窗口主要在于
    while(end < len){
        sum += nums[end];
        while (sum >= target) {
            // 最小长度比较
            ans = Math.min(ans, end - start + 1);
            // start ++前 往前滑一下
            sum -= nums[start];
            start++;
        }
        // 保证不加到重复值
        end++;
    }
    return ans === Infinity ? 0 : ans
};
//leetcode submit region end(Prohibit modification and deletion)
